#include "Shm.hpp"  // 引入共享内存相关类
#include "Fifo.hpp" // 引入命名管道相关类

int main()
{
    // 创建共享内存（以 CREATER 用户身份）
    Shm shm(pathname, projid, CREATER);
    
    // 打印共享内存的属性（如大小、key等信息）
    shm.Attr();

    // 创建并初始化命名管道（FIFO）
    NamedFifo fifo(PATH, FILENAME);
    
    // 创建 FileOper 对象，用于读取 FIFO 文件
    FileOper readerfile(PATH, FILENAME);
    
    // 打开 FIFO 以进行读取（该操作会阻塞，直到管道有数据写入）
    readerfile.OpenForRead();

    // 获取共享内存的虚拟地址
    char* mem = (char*)shm.VirtualAddr();

    // 无限循环，直到管道没有数据可以读取
    while(true)
    {
        // 等待并读取 FIFO 中的一个字节
        if (readerfile.Wait())  // 如果成功读取到数据
        {
            // 输出共享内存中的内容
            printf("%s\n", mem);
        }
        else
        {
            // 如果没有数据（FIFO为空），则退出循环
            break;
        }
    }

    // 关闭 FIFO 文件
    readerfile.Close();
    
    // 打印结束信息
    std::cout << "server end normal!" << std::endl;
    return 0;
}
